/*******************************************************************************
 * Copyright (c) 2010 liw.
 * All rights reserved. 
 * 
 * This file is part of VanBus.
 * 
 *     VanBus is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     VanBus is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with VanBus.  If not, see <http://www.gnu.org/licenses/>.
 * Contributors:
 *     liw - initial API and implementation
 ******************************************************************************/
package org.niclab.vanbus.query.ws;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.niclab.vanbus.activity.controller.BusRouteController;
import org.niclab.vanbus.model.BusRoute;
import org.niclab.vanbus.model.BusStop;

import android.content.Context;
import android.util.Log;

public class StopTimesWSQueryResResolver extends BaseResponseResolver<StopTimesWSQueryResResolver.QueryResult>{

	public static class QueryResult{
		Map<BusRoute,List<String>> times = new HashMap<BusRoute,List<String>>();
		
		public void addTimes(BusRoute route, List<String> time){
			times.put(route,time);
			
		}
		
		public List<String> getTimes(BusRoute route){
			return times.get(route);
		}
		
		public Map<BusRoute,List<String>> getRoutesWithTimes(){
			return times;
		}
		
	}
	private final static String LOG_TAG="StopTimesWSQueryResHandler";
	

	@Override
	protected QueryResult interpret(HttpEntity entity) {
		
		JSONArray jsonArray =null;
		//List<BusRoute> routes =new ArrayList<BusRoute>();
		QueryResult result = new QueryResult();
		try {
			String resp = EntityUtils.toString(entity);
			jsonArray = new JSONArray(resp);
			BusRouteController routeCtr = new BusRouteController();
			for(int i=0;i<jsonArray.length();i++){
				JSONObject jObj = jsonArray.getJSONObject(i);
				String routeDir=jObj.getString("direction");
				String routeId = jObj.getString("routeID");
				String routeName = jObj.getString("routeName");
				JSONArray schedule = jObj.getJSONArray("times");
				
				BusRoute route = routeCtr.createBusRouteFromCache(routeId,routeDir,routeName,null);
				
				List<String> times = new ArrayList<String>();
				
				
				for(int j=0; j<schedule.length();j++)
					times.add(schedule.getString(j));
				
				result.addTimes(route, times);
				
				
			}
		}catch (JSONException e) {
			Log.e(LOG_TAG,"JSONArray unmarshing  exception");
			e.printStackTrace();
		} catch (ParseException e) {
			Log.e(LOG_TAG,"parse response Entity exception");
			e.printStackTrace();
		} catch (IOException e) {
			Log.e(LOG_TAG,"IOException parse response Entity");
			e.printStackTrace();
		}
		
		
		return result;
	
		
	
	}
	

}
